package com.producer.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;

@Service
public class LogService {

    @Autowired
    KafkaSender kafkaSender;

    public void sendLogAsync() {
        if (!TransactionSynchronizationManager.isSynchronizationActive()) {
            // 调用异步方法发送日志
            System.out.println("事务未开启");
            // 异步发送日志(解决由于同一个类内部方法调用不会创建代理，所以aop不生效，则@Async注解无作用问题)
            kafkaSender.send();
        } else {
            // 注册事务钩子，在事务提交或回滚后执行
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
                @Override
                public void afterCompletion(int status) {
                    System.out.println("事务开启并执行完毕");
                    // 异步发送日志(解决由于同一个类内部方法调用不会创建代理，所以aop不生效，则@Async注解无作用问题)
                    kafkaSender.send();
                }
            });
        }
    }
}
